sparksql读hbase数据 spark数据导入hbase

您所在的位置:网站首页 hbase 导出文件后用spark 读取 sparksql读hbase数据 spark数据导入hbase

sparksql读hbase数据 spark数据导入hbase

2024-06-01 07:32| 来源: 网络整理| 查看: 265

Spark是目前最流行的分布式计算框架,而HBase则是在HDFS之上的列式分布式存储引擎,基于Spark做离线或者实时计算,数据结果保存在HBase中是目前很流行的做法。例如用户画像、单品画像、推荐系统等都可以用HBase作为存储媒介,供客户端使用。

因此Spark如何向HBase中写数据就成为很重要的一个环节了。本文将会介绍三种写入的方式。代码在spark 2.2.0版本亲测。

1. 基于HBase API批量写入

第一种是最简单的使用方式了,就是基于RDD的分区,由于在spark中一个partition总是存储在一个excutor上,因此可以创建一个HBase连接,提交整个partition的内容。

代码如下:

rdd.foreachPartition { records => val config = HBaseConfiguration.create config.set("hbase.zookeeper.property.clientPort", "2181") config.set("hbase.zookeeper.quorum", "a1,a2,a3") val connection = ConnectionFactory.createConnection(config) val table = connection.getTable(TableName.valueOf("rec:user_rec")) // 举个例子而已,真实的代码根据records来 val list = new java.util.ArrayList[Put] for(i HBaseRecord(i, "extra")} val df:DataFrame = spark.createDataFrame(data) df.write .mode(SaveMode.Overwrite) .options(Map(HBaseTableCatalog.tableCatalog -> catalog)) .format("org.apache.spark.sql.execution.datasources.hbase") .save() } def catalog = s"""{ |"table":{"namespace":"rec", "name":"user_rec"}, |"rowkey":"key", |"columns":{ |"col0":{"cf":"rowkey", "col":"key", "type":"string"}, |"col1":{"cf":"t", "col":"col1", "type":"boolean"}, |"col2":{"cf":"t", "col":"col2", "type":"double"}, |"col3":{"cf":"t", "col":"col3", "type":"float"}, |"col4":{"cf":"t", "col":"col4", "type":"int"}, |"col5":{"cf":"t", "col":"col5", "type":"bigint"}, |"col6":{"cf":"t", "col":"col6", "type":"smallint"}, |"col7":{"cf":"t", "col":"col7", "type":"string"}, |"col8":{"cf":"t", "col":"col8", "type":"tinyint"} |} |}""".stripMargin } case class HBaseRecord( col0: String, col1: Boolean, col2: Double, col3: Float, col4: Int, col5: Long, col6: Short, col7: String, col8: Byte) object HBaseRecord { def apply(i: Int, t: String): HBaseRecord = { val s = s"""row${"%03d".format(i)}""" HBaseRecord(s, i % 2 == 0, i.toDouble, i.toFloat, i, i.toLong, i.toShort, s"String$i: $t", i.toByte) } }

sparksql读hbase数据 spark数据导入hbase_xml_03

然后再resources目录下,添加hbase-site.xml、hdfs-site.xml、core-site.xml等配置文件。主要是获取Hbase中的一些连接地址。

3. HBase 2.x+即将发布的hbase-spark

如果有浏览官网习惯的同学,一定会发现,HBase官网的版本已经到了3.0.0-SNAPSHOT,并且早就在2.0版本就增加了一个hbase-spark模块,使用的方法跟上面hortonworks一样,只是format的包名不同而已,猜想就是把hortonworks给拷贝过来了。

另外Hbase-spark 2.0.0-alpha4目前已经公开在maven仓库中了。

http://mvnrepository.com/artifact/org.apache.hbase/hbase-spark



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3